
package br.com.wuo.karina.model.dao.impl;

import java.sql.Connection;

import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import br.com.wuo.karina.model.Aluno;
import br.com.wuo.karina.model.dao.AlunoDao;

public class AlunoDaoImpl implements AlunoDao {
	
	private Connection conn;
	
	public AlunoDaoImpl(){
		try {
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
			String database = "jdbc:odbc:Wuo";
			conn = DriverManager.getConnection(database);
						
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        
	}

	@Override
	public void salvarAluno(Aluno aluno) throws SQLException {
		
		String query = "INSERT INTO Alunos(Nome, Sobrenome, Logradouro, Numero, Complemento, " +
				  						  "Cep, Bairro, Cidade, Estado, DtDeNascimento, Responsavel, Telefone, " +
				  						  "Celular, HorarioAula, Mensalidade, Vencimento, Status, Tipo) " +
				  	   "VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
		
		PreparedStatement stmt = conn.prepareStatement(query);
		
		stmt.setString(1, aluno.getNome());
		stmt.setString(2, aluno.getSobrenome());
		stmt.setString(3, aluno.getLogradouro());
		stmt.setInt(4, aluno.getNumero());
		stmt.setString(5, aluno.getComplemento());
		stmt.setString(6, aluno.getCep());
		stmt.setString(7, aluno.getBairro());
		stmt.setString(8, aluno.getCidade());
		stmt.setString(9, aluno.getEstado());
		stmt.setString(10, aluno.getDtDeNascimento());
		stmt.setString(11, aluno.getResponsavel());
		stmt.setString(12, aluno.getTelefone());
		stmt.setString(13, aluno.getCelular());
		stmt.setString(14, aluno.getHorarioAula());
		stmt.setString(16, aluno.getMensalidade());
		stmt.setString(17, aluno.getVencimento());
		stmt.setString(18, "A");
		stmt.setString(19, aluno.getTipo());
		
		stmt.executeUpdate();
		

	}

	@Override
	public Aluno pesquisarAluno(int cod) throws SQLException {
				
		String query = "SELECT Cod, Nome, Sobrenome, Logradouro, Numero, Complemento, Cep, Bairro, " +
				              "Cidade, Estado, DtDeNascimento, Responsavel, Telefone, Celular, HorarioAula, Mensalidade, Vencimento, Tipo " +
		               "FROM Alunos " + 
		               "WHERE Cod = ? " +
		               "AND Status = ? ";
		
		PreparedStatement AlunoStmt = conn.prepareStatement(query);
		
		AlunoStmt.setInt(1, cod);
		AlunoStmt.setString(2, "A");
		
		ResultSet rs = AlunoStmt.executeQuery();
		rs.next();
		
		int codigo = rs.getInt("Cod");
		String nome = rs.getString("Nome");
		String sobrenome = rs.getString("Sobrenome");
		String logradouro = rs.getString("Logradouro");
		int numero = rs.getInt("Numero");
		String complemento = rs.getString("Complemento");
		String cep = rs.getString("Cep");
		String bairro = rs.getString("Bairro");
		String cidade = rs.getString("Cidade");
		String estado = rs.getString("Estado");
		String dtDeNascimento = rs.getString("DtDeNascimento");
		String responsavel = rs.getString("Responsavel");
		String telefone = rs.getString("Telefone");
		String celular = rs.getString("Celular");
		String horarioAula = rs.getString("HorarioAula");
		String mensalidade = rs.getString("Mensalidade");
		String vencimento = rs.getString("Vencimento");
		String tipo = rs.getString("Tipo");
		
		Aluno aluno = new Aluno(codigo, nome, sobrenome, logradouro, numero, complemento, cep, bairro, cidade, estado, dtDeNascimento, responsavel, telefone, celular, horarioAula,  mensalidade, vencimento, tipo);
		
		return aluno;
	}

	@Override
	public void alterarAluno(Aluno aluno) throws SQLException {
		
		String query = "UPDATE Alunos SET " +
							"Nome = ? ," +
							"Sobrenome = ? ," +
							"Logradouro = ? ," +
							"Numero = ? ," +
							"Complemento = ? ," +
							"Cep = ? ," +
							"Bairro = ? ," +
							"Cidade = ? ," +
							"Estado = ? ," +
							"DtDeNascimento = ? ," +
							"Responsavel = ? ," +
							"Telefone = ? ," +
							"Celular = ? ," +
							"HorarioAula = ? ," +
							"Mensalidade = ? ," +
							"Vencimento = ? ," +
							"Tipo = ? " +
						"WHERE cod = ? ";
		
		PreparedStatement alunoStmt = conn.prepareStatement(query);
		
		alunoStmt.setString(1, aluno.getNome());
		alunoStmt.setString(2, aluno.getSobrenome());
		alunoStmt.setString(3, aluno.getLogradouro());
		alunoStmt.setInt(4, aluno.getNumero());
		alunoStmt.setString(5, aluno.getComplemento());
		alunoStmt.setString(6, aluno.getCep());
		alunoStmt.setString(7, aluno.getBairro());
		alunoStmt.setString(8, aluno.getCidade());
		alunoStmt.setString(9, aluno.getEstado());
		alunoStmt.setString(10, aluno.getDtDeNascimento());
		alunoStmt.setString(11, aluno.getResponsavel());
		alunoStmt.setString(12, aluno.getTelefone());
		alunoStmt.setString(13, aluno.getCelular());
		alunoStmt.setString(14, aluno.getHorarioAula());
		alunoStmt.setString(15, aluno.getMensalidade());
		alunoStmt.setString(16, aluno.getVencimento());
		alunoStmt.setString(17, aluno.getTipo());
		alunoStmt.setInt(18, aluno.getCodigo());
		
		alunoStmt.executeUpdate();

	}

	@Override
	public void deletarAluno(int cod) throws SQLException {
		String query = "UPDATE Alunos SET Status = ? WHERE cod = ? ";

		PreparedStatement alunoStmt = conn.prepareStatement(query);
				
		alunoStmt.setString(1, "I");
		alunoStmt.setInt(2, cod);
				
		alunoStmt.executeUpdate();

	}

	@Override
	public ArrayList<String> getAllAlunos() throws SQLException {
		ArrayList<String> cmbAlunosData  = new ArrayList<>();
		
		String query = "SELECT Cod, Nome, Sobrenome FROM Alunos WHERE Status = ? ";
		
		PreparedStatement alunoStmt = conn.prepareStatement(query);
		
		alunoStmt.setString(1, "A");
		
		ResultSet rs = alunoStmt.executeQuery();
		
		
		while(rs.next()){
			int codigo = rs.getInt("Cod");
			String nome = rs.getString(2);
			String sobrenome = rs.getString("Sobrenome");
			
			String data = codigo + " - " + nome + " " + sobrenome;
			cmbAlunosData.add(data);			
		}
		
		return cmbAlunosData;
	}

}
